package com.qltv.utils;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.log4j.Logger;

/**
 * 
 * 类名：DBUtility
 * 描述：数据库连接、关闭
 * @author telnet
 * 创建时间：2018年1月12日
 */
public class DBUtility {
	private static BasicDataSource dataSource = null;
	private static final Logger logger = Logger.getLogger(DBUtility.class);

	public DBUtility() {
	}
	
	public static void init(){
		Properties dbPros = new Properties();
		try {
			dbPros.load(DBUtility.class.getClassLoader().getResourceAsStream("db.properties"));
		} catch (Exception e) {
			e.printStackTrace();
		}

		try {
			String driverClassName = dbPros.getProperty("jdbc.driverClassName");
			String url = dbPros.getProperty("jdbc.url");
			String username = dbPros.getProperty("jdbc.username");
			String password = dbPros.getProperty("jdbc.password");

			/*
			 *  dataSource.maxIdle=20
				dataSource.minIdle=5
				dataSource.maxActive=50
				dataSource.maxWait=1000
			 */
			String initialSize = dbPros.getProperty("dataSource.initialSize");
			String minIdle = dbPros.getProperty("dataSource.minIdle");
			String maxIdle = dbPros.getProperty("dataSource.maxIdle");
			String maxActive = dbPros.getProperty("dataSource.maxActive");
			String maxWait = dbPros.getProperty("dataSource.maxWait");

			dataSource = new BasicDataSource();
			dataSource.setDriverClassName(driverClassName);
			dataSource.setUrl(url);
			dataSource.setUsername(username);
			dataSource.setPassword(password);
			//初始化连接
			if(initialSize!=null){
				dataSource.setInitialSize(Integer.parseInt(initialSize));
			}
			//最小空闲连接
			if(minIdle!=null){
				dataSource.setMinIdle(Integer.parseInt(minIdle));
			}
			//最大空闲连接
			if(maxIdle!=null){
				dataSource.setMaxIdle(Integer.parseInt(maxIdle));
			}
			//超时回收时间（以毫秒为单位）
			if(maxWait!=null){
				dataSource.setMaxActive(Integer.parseInt(maxWait));
			}
			//最大连接数
			if(maxActive!=null){
				if(!maxActive.trim().equals("0")){
					dataSource.setMaxActive(Integer.parseInt(maxActive));
				}
			}

			/* 
		     * 指定所有参数连接数据源 
		     *  
		     * @param connectURI 
		     *            数据库 
		     * @param username 
		     *            用户名 
		     * @param pswd 
		     *            密码 
		     * @param driverClass 
		     *            数据库连接驱动名 
		     * @param initialSize 
		     *            初始连接池连接个数 
		     * @param maxtotal 
		     *            最大活动连接数 
		     * @param maxIdle 
		     *            最大连接数 
		     * @param maxWaitMillis 
		     *            获得连接的最大等待毫秒数 
		     * @param minIdle 
		     *            最小连接数 
		     * @return 
		     */  
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("创建连接池失败，请检查配置！！！");
		}
	}
	public static synchronized Connection getConnection() throws SQLException{
		if(dataSource==null){
			init();
		}
		Connection conn = null;
		if(dataSource!=null){
			conn = dataSource.getConnection();
		}
		return conn;
	}
	public static void dispose(Connection conn){
		if(conn!=null){
			try {
				conn.close();
			} catch (Exception e) {
				logger.error("关闭资源失败！");
				e.printStackTrace();
			}
		}
	}
	
}
